#ifndef __COMMON_TYPES__
#define __COMMON_TYPES__

/* including */
//* sys */
#if defined(WIN32) || defined(_WIN64) /* On Windows */
#include <io.h>
#else /* On Linux */
#include <dirent.h>
#endif
#include <unistd.h>

//* lib */
#include <any>
#include <cmath>
#include <cstring>
#include <fstream>
#include <initializer_list>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <memory>
#include <numeric>
#include <optional>
#include <sstream>
#include <string>
#include <tuple>
#include <unordered_map>
#include <variant>
#include <vector>

/* using */
using std::cout, std::endl;
using std::dynamic_pointer_cast;
using std::find;
using std::map, std::unordered_map;
using std::pair, std::make_pair;
using std::shared_ptr, std::make_shared;
using std::string, std::to_string;
using std::tuple, std::make_tuple;
using std::vector;

const int    MAX_Int   = std::numeric_limits<int>::max();
const double MAX_Float = std::numeric_limits<float>::max();
const double PI        = 3.14159265358979323846;
const double EPSILON   = 1e-6;

typedef char  int8;
typedef short int16;
typedef int   int32;
typedef long  int64;

typedef unsigned char  uint8;
typedef unsigned short uint16;
typedef unsigned int   uint32;
typedef unsigned long  uint64;

typedef float  float32;
typedef double float64;

#endif // __COMMON_TYPES__
